package model

import (
	"pet-server/basic/config"
	"time"
)

// 宠物表
type Pet struct {
	Id            uint64    `gorm:"column:id;type:bigint UNSIGNED;primaryKey;not null;" json:"id"`
	CreatedAt     time.Time `gorm:"column:created_at;type:datetime(3);default:NULL;" json:"created_at"`
	UpdatedAt     time.Time `gorm:"column:updated_at;type:datetime(3);default:NULL;" json:"updated_at"`
	DeletedAt     time.Time `gorm:"column:deleted_at;type:datetime(3);default:NULL;" json:"deleted_at"`
	Img           string    `gorm:"column:img;type:varchar(100);comment:图片;default:NULL;" json:"img"`                          // 图片
	Name          string    `gorm:"column:name;type:varchar(20);comment:昵称;default:NULL;" json:"name"`                         // 昵称
	Age           int32     `gorm:"column:age;type:int;comment:年龄;default:NULL;" json:"age"`                                   // 年龄
	Gender        string    `gorm:"column:gender;type:varchar(20);comment:性别;default:NULL;" json:"gender"`                     // 性别
	PetType       string    `gorm:"column:pet_type;type:varchar(20);comment:宠物类型;default:NULL;" json:"pet_type"`               // 宠物类型
	Sterilization string    `gorm:"column:sterilization;type:varchar(10);comment:绝育 0否 1是;default:NULL;" json:"sterilization"` // 绝育 0否 1是
	Vaccines      string    `gorm:"column:vaccines;type:varchar(10);comment:疫苗 0否 1是;default:NULL;" json:"vaccines"`           // 疫苗 0否 1是
	Deworming     string    `gorm:"column:deworming;type:varchar(10);comment:驱虫 0否 1是;default:NULL;" json:"deworming"`         // 驱虫 0否 1是
}

func (p *Pet) TableName() string {
	return "pet"
}

// 宠物添加
func (p *Pet) CreatePet() error {
	return config.DB.Create(p).Error
}

// 宠物列表
func (c *Combo) ListPet(page, pageSize int) ([]Pet, int64, error) {
	if page <= 0 {
		page = 1
	}
	if pageSize <= 0 || pageSize >= 100 {
		pageSize = 10
	}
	var total int64
	var pet []Pet
	config.DB.Model(&Pet{}).Where("deleted_at IS NULL").Count(&total)
	err := config.DB.Where("deleted_at IS NULL").Offset((page - 1) * pageSize).Limit(pageSize).Find(pet).Error
	return pet, total, err

}
